package sedh.project
import org.hibernate.validator.AssertFalse;

import grails.test.*


class MunicipioTests extends GrailsUnitTestCase {
	
	def municipioTestado
	
    protected void setUp() {
        super.setUp()
		mockForConstraintsTests(Municipio)
		municipioTestado = new Municipio(nome:"Nome Normal", habitantes:10)
    }
	
    protected void tearDown() {
        super.tearDown()
    }

	void testUnique() {
		
		def sameName = new Municipio(nome:"Nome Normal", habitantes: 5)
		
		mockForConstraintsTests(Municipio, [sameName])
		
		assertFalse municipioTestado.validate()
		
		municipioTestado = new Municipio(nome:"Algum Outro", habitantes: 5)
		assertTrue municipioTestado.validate()
	}
	
	void testNullable() {
		
		municipioTestado = new Municipio()
		assertFalse municipioTestado.validate()
		assertEquals 'nullable', municipioTestado.errors['nome']
		assertEquals 0, municipioTestado.getHabitantes()
		
		municipioTestado = new Municipio(nome: "Nome Valido")
		
		assertTrue municipioTestado.validate()
		
		assertEquals 0, municipioTestado.getHabitantes()
		
	}
	
	void testBlank() {
		
		municipioTestado = new Municipio(nome:"")
		assertFalse municipioTestado.validate()
		assertEquals 'blank', municipioTestado.errors['nome']
		
		municipioTestado = new Municipio(nome: "Nome")
		
		assertTrue municipioTestado.validate()
		
	}
	
	void testNameSize() {
		
		municipioTestado = new Municipio(nome: "ab")
		assertFalse municipioTestado.validate()
		
		assertEquals 'size', municipioTestado.errors['nome']
		
		municipioTestado = new Municipio(nome: "abc")
		assertTrue municipioTestado.validate()
		
		municipioTestado = new Municipio(nome: "qwertyuiopasdfg hjklzxcvbnm qw")
		assertTrue municipioTestado.validate()
		
		municipioTestado = new Municipio(nome: "qwertyuiopasdfg hjklzxcvbnm qwx")
		assertFalse municipioTestado.validate()
		
		assertEquals 'size', municipioTestado.errors['nome']
		
	}
	
	void testHabitantesSize() {
		
		municipioTestado = new Municipio(nome: "Qualquer", habitantes: -1)
		assertFalse municipioTestado.validate()
		assertEquals 'min', municipioTestado.errors['habitantes']
		
		municipioTestado = new Municipio(nome: "Qualquer", habitantes: 0)
		assertTrue municipioTestado.validate()
		
		municipioTestado = new Municipio(nome: "Qualquer", habitantes: -12736)
		assertFalse municipioTestado.validate()
		assertEquals 'min', municipioTestado.errors['habitantes']
	}
}
